package com.ybbase.framework.service.system;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.ybbase.framework.model.po.system.Permission;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ybbase.framework.model.po.system.RolePermission;
import com.ybbase.framework.model.vo.MenuVO;
import com.ybbase.framework.model.vo.PermissionTreeVO;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.List;

/**
 * <p>
 * 系统菜单 服务类
 * </p>
 *
 * @author cg
 * @since 2019-11-26
 */
public interface PermissionService extends IService<Permission> {

    /**
     * 保存权限
     *
     * @param permission 权限信息
     * @author cg
     * @date 2019-11-29 17:37
     * @since cloud2.0
     */
    void savePermission(Permission permission);

    /**
     * 根据角色编码组合获取权限列表
     *
     * @param roleIds 角色编码
     * @return List<Role>
     * @author cg
     * @date 2019-11-26 17:41
     * @since cloud2.0
     */
    List<Permission> getPermissionInRoleIds(String roleIds);

    /**
     * 根据用户编码获取权限树
     *
     * @param userId 用户编码
     * @return List<PermissionTreeVO>
     * @author cg
     * @date 2019-12-01 20:52
     * @since cloud2.0
     */
    List<MenuVO> getPermissionTreeVOByUserId(Integer userId);

    /**
     * 获取所有权限
     *
     * @param queryPermission 查询参数
     * @return List<Permission>
     * @author cg
     * @date 2019-11-29 17:37
     * @since cloud2.0
     */
    List<Permission> getAllPermission(QueryWrapper<Permission> queryPermission);

    /**
     * 根据角色编码组合获取权限列表
     *
     * @param roleIds 角色编码
     * @return List<Permission>
     * @author cg
     * @date 2019-11-26 17:41
     * @since cloud2.0
     */
    List<Permission> getPermissionButtonInRoleIds(String roleIds);

    /**
     * 根据角色获取权限列表（带排序）
     *
     * @param roleId 角色编码
     * @return List<Permission>
     * @author cg
     * @date 2019-11-29 17:29
     * @since cloud2.0
     */
    List<Permission> getPermissionByRoleId(Integer roleId);

    /**
     * 查询排序的菜单权限 用户和角色编码只能存在一个
     *
     * @param list   权限列表
     * @param roleId 角色编码
     * @param userId 用户编码
     * @return List<PermissionTreeVO>
     * @author cg
     * @date 2019-12-01 09:32
     * @since cloud2.0
     */
    List<MenuVO> findSortPermission(List<Permission> list);

    /**
     * 查询角色权限信息
     *
     * @param queryWrapper 条件
     * @return List<PermissionTreeVO>
     * @author cg
     * @date 2019-12-01 09:32
     * @since cloud2.0
     */
    List<RolePermission> getRolePermissionListByPerId(QueryWrapper<RolePermission> queryWrapper);

    /**
     * 根据权限ID获取path和parent_name
     *
     * @param parentId 父类Id
     * @return Permission
     * @author jzw
     * @date 2019/12/6 12:04
     * @since cloud2.0
     */
    Permission getPermissionPathByPerId(Integer parentId);

    /**
     * 获取菜单权限二级树
     *
     * @return
     */
    List<Permission> getPerTree();

    /**
     * 根据ParentId查字菜单项目
     *
     * @param page
     * @param permissionQueryWrapper
     * @param ParentId
     * @return
     */
    IPage<Permission> findByParentId(IPage<Permission> page, QueryWrapper<Permission> queryWrapper, Integer parentId);

    /**
     * 保存菜单
     */
    public void savePermissionMenu(Permission permission);

    /**
     * 根据角色编码
     * @param
     * @return
     * @author cg
     * @date 2020-01-12 13:28
     * @since cloud2.0
    */
    List<PermissionTreeVO> getPermissionTreeVOByRoleId(String roleId);

    /**
     * 根据角色编码
     * @param
     * @return
     * @author cg
     * @date 2020-01-12 13:28
     * @since cloud2.0
     */
    List<PermissionTreeVO> getPermissionTreeVOByRoleIdCg(Integer userId,String roleId);

    /**
     * 保存用户权限数据权限
     * @param
     * @return
     * @author cg
     * @date 2020-03-26 10:37
     * @since cloud2.0
     */
    void saveUserPermission(Integer perId,Integer userId,Integer dataScope);

}
